iT邦幫忙

0

JavaScript 函式重要概念:閉包、一級函式與高階函式

  • 分享至 

  • xImage
  •  

閉包

  • 閉包使可以從內部函式訪問外部函式的作用域的變數
  • 閉包的作用:
    • 重複調用
    • 獨立變數
    • 隱藏變數

這個例子中,匿名函式會存取外部函式中的 originPrice,並保存其狀態。當呼叫 breadPrice 時,會以 originPrice 為基礎計算回傳值:

function discountTool(price) {
  const originPrice = price;
  return function (value) {
    return originPrice * value;
  };
}

const breadPrice = discountTool(100);
console.log(breadPrice(0.7)); // 70

一級函式

  • 這是一個概念,並不局限於 JavaScript
  • 定義:當函式在該語言可以被視為與其它變數一樣時,就可以稱該語言具有一級函式
  • 在 JavaScript 的案例
    • 函式可以被賦值給變數(函式表達式)
    • 函式可以作為參數傳遞給其他函式
    • 函式可以作為另一個函式的回傳值

高階函式(技法)

  • 一樣是屬於一個概念,並不局限於 JavaScript
  • 定義:
    • 接受一個或多個函式作為參數
    • 或是回傳一個函式作為結果
  • 這兩個概念與上述所介紹的一級函式所提到的案例幾乎一致,不過一級函式是「函式可作為變數使用」;而高階函式是運用手法,將函式作為參數傳入或輸出

函式可以作為參數來傳遞

const arr = ["小明", "杰倫", "漂亮阿姨"];

// 等同於使用原生 forEach 方法
function fn(arr, callbackFunction) {
  for (let index = 0; index < arr.length; index++) {
    const element = arr[index];
    callbackFunction(element, index);
  }
}

fn(arr, function (item, i) {
  console.log(item, i);
});

arr.forEach((item, i) => {
  console.log(item, i);
});

函式可以作為回傳值

function fn() {
  return function () {
    console.log("這是回傳的函式");
  };
}

fn()();

參考資料
(https://hackmd.io/@hexschool/rkEOZSJSi)


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言